package xyy.d3erpapi.config;


import org.springframework.boot.autoconfigure.batch.BatchProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;

import java.lang.reflect.Method;
import java.util.concurrent.Executors;


/**
 * @author jiangjingbo1
 */
@Configuration
public class ScheduleConfig implements SchedulingConfigurer {
    @Override
    public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {

        // 获取BatchProperties.Job类中的方法
        Method[] methods = BatchProperties.Job.class.getMethods();
        // 默认线程池大小
        int defaultPoolSize = 20;
        // 核心线程池大小
        int corePoolSize = 0;
        // 如果方法不为空，且方法数量大于0
        if (methods != null && methods.length > 0) {
            System.out.println(methods.length);
            // 遍历方法
            for (Method method : methods) {
                // 获取方法上的注解
                Scheduled annotation = method.getAnnotation(Scheduled.class);
                // 如果注解不为空
                if (annotation != null) {
                    // 核心线程池大小加1
                    corePoolSize++;
                }
            }
            // 如果默认线程池大小大于核心线程池大小
            if (defaultPoolSize > corePoolSize) {
                // 核心线程池大小等于默认线程池大小
                corePoolSize = defaultPoolSize;
            }
        }
        // 设置调度器
        scheduledTaskRegistrar.setScheduler(Executors.newScheduledThreadPool(corePoolSize));

        // 配置线程池的大小：需要根据实际的电脑配置来调整
        //scheduledTaskRegistrar.setScheduler(Executors.newScheduledThreadPool(30));
    }

}